Zusammenfassung
Netskope Threat Labs hat eine ausweichende Azorult-Kampagne in freier Wildbahn beobachtet, bei der mehrere Techniken zur Umgehung der Verteidigung von der Lieferung bis zur Ausführung eingesetzt werden, um beim Diebstahl sensibler Daten unter dem Radar des Verteidigers zu fliegen.
Azorult ist ein Informationsdieb, der erstmals 2016 entdeckt wurde und sensible Informationen wie Benutzeranmeldeinformationen, Browserinformationen und Krypto-Wallet-Daten stiehlt. Azorult ist auf dem Vormarsch und gehört derzeit zu den Top-Malware-Familien, die Netskope Threat Labs im letzten Jahr im Gesundheitswesen beobachtet hat.
In diesem Blogbeitrag führt Netskope Threat Labs eine detaillierte Analyse einer ausweichenden AzoruIt-Malware-Kampagne durch, die wir in freier Wildbahn beobachtet haben. Diese Kampagne ist aus folgenden Gründen bemerkenswert:
- Es liefert seine anfängliche Nutzlast durch HTML-Schmuggel, eine Technik zur Umgehung der Erkennung, die bei Angreifern immer beliebter wird. Diese Technik zur Umgehung der Verteidigung wurde auch von einer nationalstaatlichen Gruppe verwendet, um einen Remote-Access-Trojaner zu schmuggeln, und von der Nokoyawa-Ransomware, bei der sie den Infektionsprozess durch HTML-Schmuggel begannen.
- Es verwendet eine unorthodoxe HTML-Schmuggeltechnik, bei der die bösartige Nutzlast in eine separate JSON-Datei eingebettet ist, die auf einer externen Website gehostet wird.
- Es führt den dateilosen Azorult Infostealer heimlich aus, indem es reflektierendes Code-Laden verwendet, die festplattenbasierte Erkennung umgeht und Artefakte minimiert.
- Es verwendet eine AMSI-Bypass-Technik, um der Erkennung durch eine Vielzahl hostbasierter Antischadsoftwareprodukte, einschließlich Windows Defender, zu entgehen.
- Es stiehlt sensible Daten, darunter Informationen zu 137 verschiedenen Krypto-Wallets, Anmeldedaten, Browserdateien und wichtige Dokumente.
Google Sites dient als Lockvogel für HTML-Schmuggel
HTML-Schmuggel ist eine Technik zur Umgehung der Verteidigung, die darauf abzielt, Webkontrollen zu umgehen, die riskante Dateitypen blockieren. Es missbraucht legitime HTML5-Download-Attribute und Javascript-Blobs, um bösartige Nutzlasten auf der Client-Seite zu erstellen und Netzwerksicherheitsfilter zu umgehen.
Im Rahmen der Bedrohungsjagd von Netskope Threat Labs haben wir eine Kampagne aufgedeckt, bei der ein Angreifer gefälschte Google Docs-Seiten auf Google Sites erstellt hat, von denen er HTML-Schmuggel nutzte, um bösartige Nutzlasten herunterzuladen. Sie locken ihre Opfer auf die gefälschten Google Docs-Seiten, um sie glauben zu machen, dass die heruntergeladene Datei von Google Docs stammt. In den meisten Fällen, die wir in freier Wildbahn sehen, bettet der Angreifer die geschmuggelte bösartige Nutzlast in das Javascript selbst ein. In diesem Beispiel bettete der Angreifer die bösartige Nutzlast in eine separate JSON-Datei als BASE64-codierte Zeichenfolge ein. Wenn das Opfer auf die Website zugreift, sendet es eine GET-Anforderung, um die JSON-Datei von einer separaten Domain herunterzuladen (mahmudiyeresort[.]com[.]tr
) und extrahiert die Nutzlast von dort.
Schmuggel mit einem Captcha
Wenn ein Opfer auf eine Website zugreift, die HTML-Schmuggel verwendet, um bösartige Payloads zu liefern, wird die Payload normalerweise sofort heruntergeladen. Für diese Kampagne initiiert die auf Google Sites gehostete Website des Angreifers ein CAPTCHA, das als zusätzliche Schutzschicht gegen URL-Scanner dient. Dies trägt dazu bei, dass die HTML-Datei in öffentlichen Scannern wie Virustotal unentdeckt bleibt, die nicht über das CAPTCHA hinausgehen können.
Böswillige Verknüpfung, die mehrere Powershells und Javascripts herunterlädt
Sobald der Benutzer den CAPTCHA-Test bestanden hat, rekonstruiert der HTML-Schmuggel-Javascript-Code die Nutzlast und lädt sie auf den Computer des Opfers herunter. Bei der Payload handelt es sich um eine LNK-Verknüpfungsdatei, die ein PDF-Symbol verwendet, um Benutzer dazu zu verleiten, darauf zu klicken. Ein Klick auf die LNK-Datei startet die folgende Ereigniskette.
- Die LNK-Datei erzeugt eine Eingabeaufforderung, in der ein base64-codierter Powershell-Befehl in einer Batch-Datei mit dem Namen
Fyap4cKJ.bat
- Der PowerShell-Befehl wird dann mit einer nativen Windows-Anwendung mit dem Namen
certutil.exe
"Benannt" decodiert und überschriebenFyap4cKJ.bat
- Anschließend wird eine geplante Aufgabe mit dem Namen
t09pxsrXKG
erstellt, die die BatchdateiFyap4cKJ.bat
ausführt. - Die Batch-Datei
Fyap4cKJ.bat
führt ein Powershell-Skript aus, dasInvoke-WebRequest
zum Herunterladen einer PHP-Datei vonsqjeans[.]com
und speichert es alsqtoW0vI2.js
im Ordner temp. Es wird dannqtoW0vI2.js
mitwscript.exe
ausgeführt. - Der PowerShell-Befehl aus der Batchdatei
Fyap4cKJ.bat
löscht dann die zuvor erstellte geplante Aufgabet09pxsrXKG
.
Das Javascript qtoW0vI2.js
führt dann die folgenden drei Aufgaben aus:
- Kopiert sich selbst in und
%ProgramData%
benennt sich um alsagent.js
- Überprüft und löscht sich selbst, ob eine Datei mit dem Namen
7z52OJFPXT4J
im temporären Ordner vorhanden ist. - Lädt zwei Powershell-Skripte mit dem Namen
agent1.ps1
undagent3.ps1
mitInvoke-WebRequest
herunter und führt sie mitInvoke-Expression
aus.
Azorult Fileless Malware wird durch Reflective Code Loading geladen
Eine weitere Technik zur Umgehung der Verteidigung, die der Angreifer verwendet, besteht darin, den Azorult-Infostealer im Speicher auszuführen, indem er reflektierenden Code lädt. Das reflektierende Laden von Code in einer portablen ausführbaren Datei bedeutet, dass die Malware nicht auf die Festplatte geschrieben und ausgeführt wird, wo sie mehr Fußabdrücke und Artefakte hinterlässt, sondern Code in den eigenen Speicher eines laufenden Powershell-Prozesses lädt. Schauen wir uns an, wie sie das Laden von reflektierendem Code mit den beiden ausgeführten Powershell-Skripten erreichen.
agent1.ps1
Das erste PowerShell-Skript (agent1.ps1
) ausgeführt wird verwendet, um die Antischadsoftware-Scanschnittstelle (AMSI) zu umgehen. Dazu AmsiInitFailed
wird ein True
Wert festgelegt, bei dem die AMSI-Initialisierung fehlschlägt, was bedeutet, dass für den aktuellen Prozess kein Scan ausgeführt wird.
Der Wert von AmsiInitFailed
wird durch das Javascript qtoW0vI2.js
definiert, während es ausführt agent1.ps1
.
agent3.ps1
Das zweite PowerShell-Skript (agent3.ps1
) ist so festgelegt, dass es die folgenden Aufgaben ausführt:
1. Laden Sie einen Azorult-Lader herunter
Das Powershell-Skript (agent3.ps1
) beginnt mit dem Herunterladen des Azorult Loaders (service.exe
) aus der zuvor kompromittierten Domäne mit Invoke-WebRequest
. Die ausführbare Datei wurde wahrscheinlich im November 2023 kompiliert und erstmals im Februar bei VirusTotal eingereicht.
Der heruntergeladene Loader wird nicht auf die Festplatte geschrieben, sondern später in einem zugewiesenen Speicher ausgeführt. Der Binärinhalt wird als Byte-Array in der Variablen $image
gespeichert und später mit einer Kopierfunktion von System.Runtime.InteropServices.Marshal
in einem Speicherblockpuffer $imagebBuf
gespeichert.
Der Loader enthält einige Anti-Analyse-Funktionen, mit denen er seinen Prozess beendet, wenn er mit seiner Liste der gängigen Sandbox-Benutzernamen und Hostnamen übereinstimmt. Folgende Benutzernamen und Hostnamen werden überwacht: "Paul Jones", "Joe Cage", "PJones", "STRAZNJICA GRUBUTT", "WillCarter-PC", "FORTI-PC".
2. Definieren Sie einen Shellcode
Im Skript wird ein Shellcode für das Byte-Array $sc
definiert. Später wird dies im Speicher innerhalb desselben Threads wie die heruntergeladene ausführbare Datei ausgeführt.
3. Führen Sie eine Routine aus, die sowohl den Shellcode als auch die ausführbare Datei in den Prozessspeicher lädt
Das Skript definiert zwei Funktionen: Get-DelegateType
(GDT) und Get-ProcAddr
(GPA). Die GDT-Funktion definiert einen Delegattyp zur Laufzeit, während die GPA-Funktion die Speicheradresse einer Funktion von einem Modul zurückgibt. Später im Skript ruft die GPA-Funktion die Speicheradressen von VirtualAlloc
, CreateThread
und WaitForSingleObject
von kernel32.dll
ab.
Das Skript initiiert dann die Speicherzuweisung für den shellcode ($sc
), indem es VirtualAlloc
. Anschließend wird der Inhalt des Shellcodes mit der Methode in den zugewiesenen Speicher übertragen, der durch eine Marshal.Copy
Variable $x
dargestellt wird.
Was den Azorult-Lader (service.exe
) betrifft, Das Skript verwendet die Marshal-Methode AllocHGlobal
, um nicht verwalteten Speicher zuzuweisen, der entsprechend der Länge des Bytearrays ($image
) der ausführbaren Datei dimensioniert ist, und weist ihn zu $imageBuf
. Anschließend wird $imageBuf
der binäre Inhalt der ausführbaren Datei, der in $image
gespeichert ist, mit der Marshal.Copy
Methode
Zuletzt wird CreateThread
vom Skript ein neuer Thread initiiert, der die Speicheradressen sowohl des Shellcodes als auch der ausführbaren Datei bereitstellt. Anschließend wird verwendet WaitForSingleObject
, um auf den Abschluss des Ausführungsprozesses des Threads zu warten.
sd2.ps1
Wenn der Loader ausgeführt wird, sendet er eine HTTP GET-Anforderung, um ein weiteres Powershell-Skript mit dem Namen sd2.ps1
. Das Skript stellt zunächst eine Verbindung zu einem C2-Server her, um einen XOR-Schlüssel zu erfassen und in der $config
Variablen zu speichern. Der Schlüssel wird dann für eine byteweise XOR-Operation für die Azorult-Binärdatei verwendet, die im Skript definiert ist.
Azorult
Die Azorult-Nutzlast ist eine .NET-kompilierte Binärdatei mit dem Namen pg20.exe
, die mithilfe der Assembly.Load
Methode im Arbeitsspeicher ausgeführt wird. Es zielt darauf ab, sensible Benutzerinformationen zu sammeln, einschließlich persönlicher Dokumente, Krypto-Wallet-Informationen, Anmeldeinformationen und Browserdaten. Alle gestohlenen Dateien und Daten werden dann über HTTP an den C2-Server übertragen.
Die Malware beginnt mit einer Parameterprüfung. Wenn weniger als 2 Parameter übergeben werden, wird die Ausführung beendet.
Anschließend generiert Azorult einen privaten und öffentlichen Schlüssel sowie einen gemeinsamen geheimen Schlüssel. Es verwendet die elliptische Kurvenkryptografie von Curve25519, um einen privaten 32-Byte-Schlüssel zu generieren und daraus einen öffentlichen Schlüssel und einen gemeinsamen geheimen Schlüssel zu generieren. Diese werden verwendet, um die gestohlenen Dateien zu verschlüsseln, um eine Entdeckung zu verhindern, wenn die gestohlenen Dateien auf den C2-Server hochgeladen werden.
Der Infostealer sammelt die folgenden Daten vom Opfer:
Screenshot des primären Displays
Azorult sammelt zunächst einen Screenshot des Bildschirms des Geräts. Die Methode wird verwendet GetDeviceCaps
, um die Auflösung des primären Bildschirms abzurufen. Anschließend wird mit der Methode, bei Graphics.CopyFromScreen
der der Inhalt des Bildschirms in ein Bitmapobjekt kopiert wird, ein Screenshot des gesamten Bildschirms erstellt. Abschließend wird das aufgenommene Bild als JPEG-Datei gespeichert.
Browser-Daten
Azorult stiehlt die Browserdaten des Opfers. Es kopiert den Inhalt der Anmeldedaten, des lokalen Status, der Cookies und der Webdaten von Chrome in den Roaming-Ordnerpfad, um später exfiltriert zu werden. Es verwendet die InternalCopy
intern definierte Methode und verwendet die Win32-Funktion CopyFile
, um alle Browserdaten zu kopieren.
Die gleiche Routine wird auf die Datenbankdateien von Firefox angewendet. Er kopiert den Inhalt mehrerer datenbankbezogener Dateien und speichert ihn im Roaming-Profilpfad. Es kopiert die folgenden Dateien: formhistory.sqlite
, places.sqlite
, cookies.sqlite
, logins.json
, und key4.db
.
Informationen zur Krypto-Wallet
Der Infostealer kopiert dann Krypto-Wallet-Daten vom Zielcomputer, die in Chrome, Edge und Firefox gespeichert sind. Die Malware enthält eine Liste von 119 Ziel-Chrome-Wallets und 12 Edge-Wallet-Erweiterungen. Es überprüft, ob ein Benutzer eine Google Chrome- oder Edge-Wallet-Erweiterung installiert hat, indem überprüft wird, ob der Ordnername der Wallet aus der Liste im Verzeichnis "Lokale Erweiterung" vorhanden ist. Wenn das Wallet-Verzeichnis vorhanden ist, werden die Dateien in das Roaming-Profilverzeichnis kopiert.
In ähnlicher Weise sucht Azorult auch nach einigen Ziel-Wallet-Erweiterungen in Firefox. Dazu werden alle Firefox-Erweiterungs-IDs auf dem Gerät gesammelt und mit der Liste der Ziel-Wallets abgeglichen. Sobald das Vorhandensein der Wallet-Erweiterung bestätigt wurde, kopiert es den Inhalt der Datei in den Roaming-Profilpfad.
Sensible Dokumente
Schließlich sucht Azorult auf dem Desktop nach sensiblen Dokumenten und Dateien. Es sucht nach bestimmten Dateierweiterungen und Dateien, die mit Schlüsselwörtern benannt sind, die möglicherweise persönliche vertrauliche Informationen enthalten. Bei der Suche nach bestimmten Dateien werden auch bestimmte Dateitypen übersprungen.
Dateiendung des Ziels
txt | axx | doc | xls |
kdbx | docx | xlsx |
Schlüsselwörter für Dateinamen
Sicherungskopie | Brieftasche | Hauptbuch | SafePal | UTC–20* |
Zwei-FA | geheim | Trezor | Papier-Geldbörse-*.png |
Unerwünschte Dateiendung
lnk | js | cpp | d |
exe | ts | h | pdb |
dll | asm | php | svg |
obj | s | py | wav |
vcxproj | c | pyc | smali |
vcproj | cc | cs |
Wenn alle Bedingungen erfüllt sind, liest es den Inhalt der Dateien und schreibt sie in einen Speicherstream, der später zum Exfiltrieren auf den C2-Server verwendet wird.
Alle gesammelten Dateien und Daten werden über HTTPS mit der WebRequest
Klasse an den Server gesendet. Die kopierten Daten werden mit Hilfe der GZip-Komprimierung komprimiert und anschließend in einem Array gespeichert. Das Array wird dann mit dem zuvor erstellten gemeinsamen geheimen Schlüssel verschlüsselt und dann mit der WebRequest.Create
Methode an den C2-Server gesendet. Der zuvor generierte öffentliche Schlüssel wird über requestStream
gesendet.
Schlussfolgerungen
Azorult ist ein Infostealer, der verwendet wird, um die Anmeldeinformationen und Karteninformationen von Benutzern zu stehlen. In diesem Blog haben wir eine Kampagne analysiert, bei der ein Angreifer mehrere Umgehungstechniken einsetzte, darunter HTML-Schmuggel, Umgehung von AMSI und reflektierendes Laden von Code, um seine Aktivitäten vor Sicherheitskontrollen zu verbergen. Im Gegensatz zu herkömmlichen Smugglier-Dateien, bei denen sich das Blob bereits im HTML-Code befindet, kopiert diese Kampagne eine codierte Nutzlast von einer separaten kompromittierten Website. Die Verwendung legitimer Domains wie Google Sites kann dazu beitragen, das Opfer dazu zu verleiten, zu glauben, dass der Link legitim ist. Die Azorult-Malware stiehlt dann mehrere sensible Informationen und Zahlungsdaten von ihrem Ziel. Netskope Threat Labs wird diese und andere Malware-Kampagnen, die zur Verbreitung von Infostealern verwendet werden, weiterhin überwachen.
IOCs
Alle IOCs, die sich auf diese Kampagne beziehen, finden Sie in unserem GitHub-Repository.